/* 
泛型类
*/
 /* 
  1. 声明泛型类型: 在类名的右侧  <T>   // T K V
  2. 使用泛型: 类体中
  3. 指定泛型的具体类型: 创建类的实例时, 类名的右侧 <具体类型>
  */

(() => {
  // 定义带泛型的类
  class GenericData<T> {
    // 属性
    initValue: T
    // 方法
    add: (x: T, y: T) => T
  }

  // 创建实例  泛型接口虽然有未实现的方法, 但可以创建对象, 后指定实现方法

  const genericNumber = new GenericData<number>()
  // 给实例对象指定属性和方法
  genericNumber.initValue = 3
  genericNumber.add = function (a, b) {
    return a + b + this.initValue
  }
  // 调用实例的方法
  console.log(genericNumber.add(3, 5)) // 11
})()